//@author wtfumlomglol
package amm.Graphic;

import java.io.*;
import java.util.*;

//absztrakt osztaly egy altalanos mezo leirasara
public abstract class Field {

    //a jarmu, ami eppen rajta all
    protected Vehicle occupiedBy;
    //ha nincs rajta jarmu, igaz
    protected boolean isFree = true;
    //a mezo sajat neve
    protected String name;
    //a mezon levo bonusz
    protected PowerUp powerUp = PowerUp.NOPOWER;

    protected String sign = new String();

    public boolean checkOccupy() {
        return !isFree;
    }

    //altalanos jarmu befogadas
    public void acceptVehicle(Vehicle v) {
        //ha nem szabad, biztos hogy bankrablo jott
        //ekkor az elfoglalo jarmunek meghivja a
        //bankrablohoz kotott visit metodusat
        if (!isFree) {
            occupiedBy.visit((Criminal) v);
        }
        occupiedBy = v;
        isFree=false;
     }

    //altalanos rendorvizsgalat metodus
    public void acceptPolice(Police p) {
        //ha foglalt, meghivja a jarmu rendorhoz kotott visit metodusat
        if (!isFree) {
            occupiedBy.visit(p);
        }
        //ha nem foglalt, jelzi, hogy itt nincs jarmu
    }

    //eltavozott jarmu hivja meg, hogy a mezo felszabaduljon
    public void clear() {
        occupiedBy = null;
        isFree = true;
    }

    //altalanos tavozasi szandek metodus
    public void leave(boolean forward, Compass c) {
    }

    //bankrabló hívja meg érkezéskor
    public void consume()
    {
        Criminal cr = (Criminal) occupiedBy;
        //ha van bónusz, a bankrabló felveszi
        if (powerUp!=PowerUp.NOPOWER)
        {
            cr.setPower(powerUp);
        }
        //eltűnik a bónusz
        setPower(PowerUp.NOPOWER);
    }

    public abstract String getName();

    public Place getPlace() {
        return null;
    }

    public void setNeighbour(Field f, Compass c, Direction d){}

    //a mezot rendor foglalja el, a metodust az
    //akkor hivja meg, ha korbe akar nezni a szomszedokon
    public void bustCriminal() {
    }

    //inicializálja a rajta lévő járművet
    public void setVehicle(Vehicle v)
    {
        occupiedBy=v;
        isFree=false;
    }

    //uj bonusz kerül a pályára
    public void setPower(PowerUp p)
    {
        powerUp=p;
    }

    //térképhez szolgáltat rajzjelet
    public String getMark()
    {
        if (occupiedBy!=null) return occupiedBy.getMark();
        if (powerUp==PowerUp.EASTERBUNNY) return "Y";
        else return sign;
    }

    // beállítja a rajzjelet
    public void setMark(String mark)
    {
        sign=mark;
    }
}
